#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>

using namespace std;

const int N=100010;

map<int,int> mp[N];
int n,m,q;
int h[N],cnt[N],ans[N];

void init()
{
    for(int i=0;i<N;i++)
    {
        mp[i].clear();
    }
}

int find(int x)
{
    if(h[x]!=x) h[x]=find(h[x]);
    return h[x];
}

int main()
{
    while(~scanf("%d%d%d",&n,&m,&q))
    {
        memset(cnt,0,sizeof cnt);
        memset(ans,-1,sizeof ans);
        init();
        for(int i=1;i<=n;i++) h[i]=i;
        
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            mp[i][x]++;
            cnt[x]++;
        }
        
        for(int i=1;i<=q;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            a=find(a),b=find(b);
            if(a == b) continue;
            if(mp[a].size()>mp[b].size()) swap(a,b);
            h[a]=b;
            for(auto x:mp[a])
            {
                mp[b][x.first]+=x.second;
                if(mp[b][x.first] == cnt[x.first] && ans[x.first] == -1)
                {
                    ans[x.first]=i;
                }
            }
        }
        
        for(int i=1;i<=m;i++)
        {
            if(cnt[i] == 1) puts("0");
            else if(ans[i] == 0) puts("-1");
            else printf("%d\n",ans[i]);
        }
    }
    return 0;
}
